<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" >

<title>My AppBox V2.0 | 没想好的个人博客</title>

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

<!-- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> -->
   <!-- Font Awesome CSS-->
   <link href="https://cdn.bootcss.com/font-awesome/5.13.0/css/all.css" rel="stylesheet">

   <link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/5.7.2/css/all.min.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link rel="shortcut icon" href="https://shixixiyue.gitee.io//favicon.ico?v=1709791195950">
<link rel="stylesheet" href="https://shixixiyue.gitee.io//styles/main.css">



<link rel="stylesheet" href="https://unpkg.com/aos@next/dist/aos.css" />
<script src="https://jsd.onmicrosoft.cn/npm/vue/dist/vue.js"></script>


<style>
  .hljs-ln{
    padding-bottom: 1.2rem;
    margin: 0rem !important;
  }
  .hljs-ln td {
    border: none !important;
    padding: 2px 6px !important;
    line-height: 1.2rem;
    font-size: 1rem;
  }
  .hljs-ln tr td:first-child  {
    color: cadetblue;
    border-right: 1px solid !important;
  }
  .hljs-ln tr {
    border: none !important;
  }
</style>

    <meta name="description" content="其实也不叫V2.0，只是沿用了懒得改，我的权限管理框架从开源版就搭建了，经历了FineUIMVC版和现在的FineUICore版，甚至我的前端框架 JQ-Bootstrap 也在移植底层代码。这个项目完善了我的代码生成器，FineUIMVC..." />
    <meta name="keywords" content="FineUICore" />
  </head>
  <body>
    <div id="app" class="main">

      <div class="sidebar" :class="{ 'full-height': menuVisible }">
  <div class="top-container" data-aos="fade-right">
    <div class="top-header-container">
      <a class="site-title-container" href="https://shixixiyue.gitee.io/">
        <img src="https://shixixiyue.gitee.io//images/avatar.png?v=1709791195950" class="site-logo">
        <h1 class="site-title">没想好的个人博客</h1>
      </a>
      <div class="menu-btn" @click="menuVisible = !menuVisible">
        <div class="line"></div>
      </div>
    </div>
    <div>
      
        
          <a href="https://shixixiyue.gitee.io/" class="site-nav">
            首页
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/4gOKry8Qv/" class="site-nav">
            .Net Core
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/njETBpqXu/" class="site-nav">
            FineUICore
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/XyXyeLOBB" class="site-nav">
            读书笔记
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/TyVX6hfCJ" class="site-nav">
            Vue笔记
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/3Hz2sPtzO/" class="site-nav">
            产品
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tag/Db1wShB_E" class="site-nav">
            其他
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io/" class="site-nav">
            一一一一一一一一一
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//archives" class="site-nav">
            文章归档
          </a>
        
      
        
          <a href="https://shixixiyue.gitee.io//tags" class="site-nav">
            全部标签
          </a>
        
      
    </div>
  </div>
  <div class="bottom-container" data-aos="flip-up" data-aos-offset="0">
    <div class="social-container">
      
        
      
        
      
        
      
        
      
        
      
    </div>
    <div class="site-description">
      没事啥都说
    </div>
    <div class="site-footer">
      QQ：<a href="tencent://message/?uin=935732994&Site=''&Menu=yes">935732994<a/> <a href="http://beian.miit.gov.cn">京ICP备2024045283号<a/> | <a class="rss" href="https://shixixiyue.gitee.io//atom.xml" target="_blank">RSS</a>
    </div>
  </div>
</div>


      <div class="main-container">
        <div class="content-container" data-aos="fade-up">
          <div class="post-detail">
            <h2 class="post-title">My AppBox V2.0</h2>
            <div class="post-date">2019-06-03
            
                
                  <a href="https://shixixiyue.gitee.io/tag/njETBpqXu/" class="tag">
                    FineUICore
                  </a>
                
            </div>
            
            <div class="post-content" v-pre>
              <p>其实也不叫V2.0，只是沿用了懒得改，我的权限管理框架从开源版就搭建了，经历了<a href="https://mvc.fineui.com">FineUIMVC</a>版和现在的<a href="https://core.fineui.com">FineUICore</a>版，甚至我的前端框架 <a href="https://shixixiyue.gitee.io/mybootstrapex/">JQ-Bootstrap</a> 也在移植底层代码。这个项目完善了我的代码生成器，FineUIMVC和FIneUICore的扩展，本次由FIneUIMVC版进行移植只花了一天时间，功能还没有全部移植完成，离正式发版使用还需要更新多次。</p>
<!-- more -->
<p><ul class="markdownIt-TOC">
<li>
<ul>
<li>
<ul>
<li>
<ul>
<li><a href="#%E5%AF%BC%E8%A8%80">导言</a></li>
<li><a href="#1-%E4%BB%A3%E7%A0%81%E6%A1%86%E6%9E%B6">1. 代码框架</a></li>
<li><a href="#2-%E4%B8%9A%E5%8A%A1%E5%8A%9F%E8%83%BD">2. 业务功能</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</p>
<blockquote>
<h4 id="导言">导言</h4>
<p>其实也不叫V2.0，只是沿用了懒得改，我的权限管理框架从开源版就搭建了，经历了<a href="https://mvc.fineui.com">FineUIMVC</a>版和现在的<a href="https://core.fineui.com">FineUICore</a>版，甚至我的前端框架 <a href="https://shixixiyue.gitee.io/mybootstrapex/">JQ-Bootstrap</a> 也在移植底层代码。这个项目完善了我的代码生成器，FineUIMVC和FIneUICore的扩展，本次由FIneUIMVC版进行移植只花了一天时间，功能还没有全部移植完成，离正式发版使用还需要更新多次。</p>
</blockquote>
<h4 id="1-代码框架">1. 代码框架</h4>
<p>想到哪说哪</p>
<p>本项目由FineUICore的空项目搭建，</p>
<p><em><strong>Models</strong></em> 文件夹为数据库实体，大部分由代码生成器生成，所有Message继承基类<strong>MsBase</strong> 主要实现了 实体与 JSON 的相互转换，方便与view交互。除了数据库实体，还有 <strong>MsQuery.cs</strong> 和 <strong>MsReturned.cs</strong> ，MsQuery为查询实体，所有查询条件以此实体向最底层传输，查询后所有结果由MsReturned实体返回，这样传入和返回实现统一，方便修改维护。</p>
<figure data-type="image" tabindex="1"><img src="https://shixixiyue.gitee.io//post-images/1684478982226.png" alt="Models" loading="lazy"></figure>
<figure data-type="image" tabindex="2"><img src="https://shixixiyue.gitee.io//post-images/1684479007476.png" alt="Models" loading="lazy"></figure>
<p><em><strong>BP</strong></em> 文件夹为数据库操作类（也是生成的）和一些基类，其中 <strong>SysFrameServiceExtensions</strong> 类实现的 IServiceCollection 作为数据库连接配置，来源为 <strong>appsettings.json</strong> ，其中 SQLTYPE 属性 1和2 用于切换 SQLServer 和 MySql，由 <strong>BPBase.cs</strong> 类做路由切换到对应的实现类。</p>
<figure data-type="image" tabindex="3"><img src="https://shixixiyue.gitee.io//post-images/1684479023233.png" alt="BP" loading="lazy"></figure>
<figure data-type="image" tabindex="4"><img src="https://shixixiyue.gitee.io//post-images/1684479030372.png" alt="BP" loading="lazy"></figure>
<p><em><strong>Areas</strong></em> 文件夹就是项目的页面了，Controllers 和 Views 在此文件夹下，所有 Controllers 基于 SysPageController 类，用于拦截所有前端交互，菜单权限、按钮权限、日志、信息收集等，还没有写完。代码大量使用了 FineUICoreEx 辅助前后台交互，节省代码量，写代码想提高一个档次的可以仔细研究下。</p>
<figure data-type="image" tabindex="5"><img src="https://shixixiyue.gitee.io//post-images/1684479045181.png" alt="Areas" loading="lazy"></figure>
<h4 id="2-业务功能">2. 业务功能</h4>
<p>首先我并不了解FineUI的AppBox 读者不要做比较。功能上还是实现了简单的权限管理，包括菜单和按钮权限，角色-人员关系，目前没有部门概念，也是逐一说一下。</p>
<p><em><strong>功能管理</strong></em>  在 <strong>Areas</strong> 的实体我定义为功能，是一个一个的页面，但不是菜单，与菜单解耦，在功能管理中，指定页面地址，页面中的按钮等。</p>
<figure data-type="image" tabindex="6"><img src="https://shixixiyue.gitee.io//post-images/1684479062049.png" alt="功能管理" loading="lazy"></figure>
<p><em><strong>字典管理</strong></em>  用于管理系统配置 有 字典分类 和 字典明细 ，做一些开关，配置，状态其他等等。</p>
<figure data-type="image" tabindex="7"><img src="https://shixixiyue.gitee.io//post-images/1684479076124.png" alt="字典管理" loading="lazy"></figure>
<p><em><strong>菜单管理</strong></em>  才是现实到页面左侧菜单，可以指定功能，功能连接到了页面，弹出页面 是|否，用于子页面按钮权限用，现在还没有例子，还可以编辑参数，作为 URL 参数传入页面，这样不同菜单指向同一功能页面也可以显示不同的东西，菜单管理是由用户定义，功能是由开发人员定义，这也是分开配置的一个原因。</p>
<figure data-type="image" tabindex="8"><img src="https://shixixiyue.gitee.io//post-images/1684479095003.png" alt="菜单管理" loading="lazy"></figure>
<p><em><strong>用户</strong></em>  一切的开始，登陆后找到对应的角色，然后判断角色对应的权限。这里加入了默认的 超级管理员 （目前是admin用户），作为开发人员进入直接略过所有权限判断，可以查看和修改所以系统的配置，像字典有些是不能给客户开放的，需要开发人员修改，还有功能管理也不是使用者维护的。</p>
<figure data-type="image" tabindex="9"><img src="https://shixixiyue.gitee.io//post-images/1684479106752.png" alt="用户" loading="lazy"></figure>
<p><em><strong>角色管理</strong></em> 为权限配置入口，主要有几点说明，维护角色只能维护登录人创建的角色，比如我是二级部门角色，是一级部门指定的，那我是看不见上一级的配置的，也无法修改，只能由上一级维护我。目前只能选定用户，权限配置中会以菜单列出所有的按钮，通过勾选进行按钮权限，目前按钮权限只有 显示 和 不显示 所以只有勾选的操作。</p>
<figure data-type="image" tabindex="10"><img src="https://shixixiyue.gitee.io//post-images/1684479118132.png" alt="角色管理" loading="lazy"></figure>
<p>其他功能还要完善，看心情吧，真想捐赠的就朝我要二维码了，强求也没用。</p>

            </div>
            
              <div class="tag-container">
                
                  <a href="https://shixixiyue.gitee.io/tag/njETBpqXu/" class="tag">
                    FineUICore
                  </a>
                
              </div>
            
            
              <div class="next-post">
                <div class="next">下一篇</div>
                <a href="https://shixixiyue.gitee.io/fineuicore-kuo-zhan-si/">
                  <h3 class="post-title">
                    FineUICore扩展（四）
                  </h3>
                </a>
              </div>
            

            

          </div>

        </div>
      </div>
    </div>

    <script src="https://unpkg.com/aos@next/dist/aos.js"></script>
<script type="application/javascript">

AOS.init();

var app = new Vue({
  el: '#app',
  data: {
    menuVisible: false,
  },
})

</script>


  <script src="//jsd.onmicrosoft.cn/gh/highlightjs/cdn-release@11.5.1/build/highlight.min.js"></script>
  <script>
    hljs.initHighlightingOnLoad();
    //hljs.registerLanguage('mermaid', window.hljsDefineMermaid);
  </script>
  <script src="//jsd.onmicrosoft.cn/npm/highlightjs-line-numbers.js@2.8.0/dist/highlightjs-line-numbers.min.js"></script>
  <script>
    hljs.initLineNumbersOnLoad({
      singleLine: true
    });
  </script>
 <script src="https://jsd.onmicrosoft.cn/npm/mermaid/dist/mermaid.min.js"></script>
   <script>
    mermaid.initialize({
      startOnLoad: true,
      securityLevel: 'loose',
    });
  </script>





  </body>
</html>
